#include <iostream>

#include "matrice.h"

Matrice::Matrice(int sl,int sc):sizeCol(sc),sizeRan(sl){
		for(int i=0;i<getSizeRan();i++)
		{
		    for(int j=0;j<getSizeCol();j++)
                m[i][j]=0;
		}

}
int Matrice::getSizeCol()const{
    return sizeCol;
}
int Matrice::getSizeRan()const{
    return sizeRan;
}
void Matrice::afisare(){
 	for(int i=0;i<getSizeRan();i++)
		{
		    for(int j=0;j<getSizeCol();j++)
                std::cout<<' '<<m[i][j];
            std::cout<<"\n";
		}
}
void Matrice::citire(){
 	for(int i=0;i<getSizeRan();i++)
		{
		    for(int j=0;j<getSizeCol();j++){
                std::cout<<"M["<<i<<"]["<<j<<"]= ";
                std::cin>>m[i][j];}
		}


}
void Matrice::ordonare(){
    int i,j,schimbat,aux;
    do
    {
        schimbat=0;
        for(i=0;i<getSizeRan();i++)
        for(j=0;j<getSizeCol()-1;j++)  //parcurgem vectorul
         if(m[i][j] > m[i][j+1])           //daca valoarea i din vectorul a este mai mica decat cea de pe pozitia i+1
         {                                //interschimbare
            aux=m[i][j];
            m[i][j]=m[i][j+1];
            m[i][j+1]=aux;
            schimbat=1;
         }
    }while(schimbat);
    do
    {
        schimbat=0;
        for(i=0;i<getSizeRan()-1;i++)
        for(j=0;j<getSizeCol();j++)  //parcurgem vectorul
         if(m[i][j] > m[i+1][j])           //daca valoarea i din vectorul a este mai mica decat cea de pe pozitia i+1
         {                                //interschimbare
            aux=m[i][j];
            m[i][j]=m[i+1][j];
            m[i+1][j]=aux;
            schimbat=1;
         }
    }while(schimbat);
}
Matrice& Matrice::operator+(const Matrice& right){
    	for(int i=0;i<getSizeRan();i++)
		{
		    for(int j=0;j<getSizeCol();j++)
                m[i][j]=m[i][j]+right.m[i][j];
		}
        return *this;
}
Matrice& Matrice::operator-(const Matrice& right){
    	for(int i=0;i<getSizeRan();i++)
		{
		    for(int j=0;j<getSizeCol();j++)
                m[i][j]=m[i][j]-right.m[i][j];
		}
        return *this;
}
Matrice& Matrice::operator*(const Matrice& right){
    int i,j,k,c[getSizeRan()][getSizeCol()];
    for(i=0;i<getSizeRan();i++)
        for(j=0;j<getSizeCol();j++){
                c[i][j]=0;
            for(k=0;k<getSizeRan();k++)
                c[i][j]=c[i][j]+(m[i][k]*right.m[k][j]);
        }
    for(i=0;i<getSizeRan();i++)
        for(j=0;j<getSizeCol();j++)
            m[i][j]=c[i][j];
        return *this;
}
int Matrice::operator ()(int i,int j){
    return m[i][j];
}

